package com.centriole.service.workflow.dao;

import java.util.List;

import com.centriole.service.workflow.entity.FlowVariable;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.centriole.service.workflow.entity.Process;

@Mapper
public interface ProcessMapper {
	/**新增流程定义
	 * @param process
	 */
	public void insert(Process process);
	
	/**修改流程定义
	 * @param process
	 */
	public void update(Process process);
	
	/**根据ID获取流程定义
	 * @return
	 */
	public Process selectById(String processId);
	
	/**根据流程名称查询流程定义
	 * @param processName
	 */
	public List<Process> select(String processName);
	
	/*
	 * 【2018/5/24】修改对应的sql
	 *根据processKey查询对应流程
	 * @param processKey
	 * @return
	 */
	public Process selectByProcessKey(String processKey);
	
	/**根据processKey查询流程
	 * @param processKey
	 * @return
	 */
	public List<Process> selectListByProcessKey(String processKey);
	
	/**获取已部署流程定义
	 * @return
	 */
	public List<Process> getDeployedProcess();
	
	/**逻辑删除
	 * @param processId
	 */
	public void logicDelete(String processId);
	
	/**物理删除
	 * @param processId
	 */
	public void delete(String processId);
	
	/**根据流程实例ID查询原始流程图
	 * @param instanceId
	 * @return
	 */
	public String getBapBpmnByInstanceId(String instanceId);


	/**2018/05/16新增：查询所有 有效的流程实例
	 * @return	List<Process>
	 */
	public List<Process> selectAll();

	/**2018/05/17新增：直接对 工作流内部表 查询指定流程变量
	 * @return	String
	 */
	String selectVariableByNameAndIstanceId(@Param("instanceId")String instanceId , @Param("varname") String varname);

	/**2018/05/24新增：查询指定流程实例id的实例流程变量
	 * @return	String
	 */
	List<FlowVariable> selectVariablesByInstanceId(@Param("instanceId")String instanceId );

	/**2018/05/24新增：
	 * 指定用户id签收指定任务
	 * @return	String
	 */
	int signTask(@Param("taskId") String taskId ,@Param("userId") String userId);

	/**2018/05/25新增：
	 * 查询一个Task的签收人，如果这个Task被签收过的话
	 * @return	String
	 */
	String selectSigner( @Param("taskId") String taskId);

	/**2018/05/25新增：
	 * 查询一个流程实例的发起人
	 * @return	String
	 */
	String selectStartUserId(@Param("instanceId")String instanceId);

	/**2018/06/14新增：
	 * 查询一个流程实例是否结束
	 * @return	String	如果流程实例结束，那么会返回该实例的发起人id；否则，返回null
	 */
	String isFinished(@Param("instanceId") String instanceId);
}
